/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jomijushi.fid.servicios;


import com.jomijushi.fid.dao.TipoEdicionImplementsDAO;
import com.jomijushi.fid.dao.TipoEdicionInterfazDAO;
import com.jomijushi.fid.dominio.FidTipoEdicion;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;


/**
 * Servicio de consultas y operaciones de datos para la entidad
 * TipoEdicion.
 * @author Pedro Shiguihara J
 */
public class TipoEdicionImplementsService implements TipoEdicionInterfazService {


    /* Atributos */
    private TipoEdicionInterfazDAO tipoEdicionDAO = new TipoEdicionImplementsDAO();
    private EntityManagerFactory emf;


    /*Metodos*/
    /**
     * Entrega la variable administradora de entidades, asociada a la unidad
     * de persistencia de FID, a la variable de clase.
     * @param emf Variable asociada a la unidad de persistencia de la aplicacion.
     */
    @PersistenceContext
    public void setEntityManagerFactory(EntityManagerFactory emf) {
        this.emf = emf;
    }


   /**
    * Dado un objeto FidTipoEdicion, se registra en la base de datos.
    * @param objTipoEdicion Objeto FidTipoEdicion que será registrada en la base de datos.
    */
    public void crearTipoEdicion(FidTipoEdicion objTipoEdicion) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        tipoEdicionDAO.setEntityManager(em);
        tipoEdicionDAO.persist(objTipoEdicion);
        em.getTransaction().commit();
        em.close();
    }


    /**
     * Dado un objeto FidTipoEdicion, se modifica en la base de datos.
     * @param objTipoEdicion Objeto FidTipoEdicion que será modificada en la base de datos.
     */
    public void editarTipoEdicion(FidTipoEdicion objTipoEdicion) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        tipoEdicionDAO.setEntityManager(em);
        tipoEdicionDAO.merge(objTipoEdicion);
        em.getTransaction().commit();
        em.close();
    }


    /**
     * Dado un objeto FidTipoEdicion, se elimina de la base de datos.
     * @param id ID de un objeto FidTipoEdicion que será eliminada de la base de datos.
     */
    public void eliminarTipoEdicion(int id) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        tipoEdicionDAO.setEntityManager(em);
        FidTipoEdicion fidTipoEdicion = null;
        fidTipoEdicion = em.getReference(FidTipoEdicion.class, id);
        fidTipoEdicion.getId();
        tipoEdicionDAO.remove(fidTipoEdicion);
        em.getTransaction().commit();
        em.close();
    }


     /**
     * Dado un id de un objeto FidTipoEdicion, se recupera de la base de datos.
     * @param id Identificador (id) del objeto FidTipoEdicion.
     * @return id ID de un objeto FidTipoEdicion que será recuperada de la base de datos.
     */
    public FidTipoEdicion buscarTipoEdicion(int id)
    {
        EntityManager em = emf.createEntityManager();
        try {
            tipoEdicionDAO.setEntityManager(em);
            FidTipoEdicion frt = null;
            frt = tipoEdicionDAO.findById(id);
            return frt;
        } finally {
            em.close();
        }
    }


    /**
     * Dado un conjunto de parámetros, se recuperará una lista de objetos FidTipoEdicion de la base de datos.
     * @param hayConsulta Determina si el parametro "jpql" viene con una consulta (true) o vacío (false).
     * @param jpql Consulta JPQL para retornar objetos de la base de datos.
     * @param esListarTodo Indicador para determinar si se hará un listado de todos los objetos encontrador (true)
     * o sólo de una parte, segmentada por los parametros "nRegs" y "regIni" (false)
     * @param nRegs Cantidad de registros a ser retornados de la base de datos de todos los encontrados.
     * @param regIni Número de registro recuperado desde donde parte el conteo de los nRegs a ser listados.
     * @return objTipoEdicion Objeto FidTipoEdicion que será recuperada de la base de datos.
     */
    public List<FidTipoEdicion> listarTiposEdicion(boolean hayConsulta, String jpql, boolean esListarTodo, int nRegs, int regIni)
    {
        EntityManager em = emf.createEntityManager();
        try {
            tipoEdicionDAO.setEntityManager(em);
            List<FidTipoEdicion> lst = tipoEdicionDAO.listarTipoEdicion(hayConsulta, jpql, esListarTodo, nRegs, regIni);
            return lst;
        } finally {
            em.close();
        }
    }


}
